﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using PiscoSourDominio;
using PiscoSourSOAPRestServices.Persistencia;
using Dapper;

namespace PiscoSourPersistencia
{
    public class ClienteDAO
    {
        public string InsertarCliente(Cliente cliente)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {

                    sqlConnection.Open();
                    string sqlQuery = "INSERT INTO PRS_CLIENTE(vchLogin,vchPass,vchDocumento,vchNombre,vchApellido,vchDireccion,vchDistrito,dtFecNacimiento, blnActivo) VALUES (@vchLogin, @vchPass,@vchDocumento,@vchNombre,@vchApellido,@vchDireccion,@vchDistrito,@dtFecNacimiento, @blnActivo)";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            vchLogin = cliente.vchLogin,
                            vchPass = cliente.vchPass,
                            vchDocumento = cliente.vchDocumento,
                            vchNombre = cliente.vchNombre,
                            vchApellido = cliente.vchApellido,
                            vchDireccion = cliente.vchDireccion,
                            vchDistrito = cliente.vchDistrito,
                            dtFecNacimiento = cliente.dtFecNacimiento,
                            blnActivo = cliente.blnActivo
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public string ActivarCliente(int codigo)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {
                    sqlConnection.Open();
                    string sqlQuery = "UPDATE PRS_CLIENTE SET blnActivo='1' WHERE intCliente=@intCliente";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            intCliente = codigo
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }
        
        public string ActualizarCliente(Cliente cliente)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {
                    sqlConnection.Open();
                    string sqlQuery = "UPDATE PRS_CLIENTE SET blnActivo=@blnActivo,vchLogin=@vchLogin,vchPass=@vchPass,vchDocumento=@vchDocumento,vchNombre=@vchNombre,vchApellido=@vchApellido,vchDireccion=@vchDireccion,vchDistrito=@vchDistrito,dtFecNacimiento=@dtFecNacimiento WHERE intCliente=@intCliente";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            intCliente = cliente.intCliente,
                            vchPass = cliente.vchPass,
                            vchLogin = cliente.vchLogin,
                            vchDocumento = cliente.vchDocumento,
                            vchNombre = cliente.vchNombre,
                            vchApellido = cliente.vchApellido,
                            vchDireccion = cliente.vchDireccion,
                            vchDistrito = cliente.vchDistrito,
                            dtFecNacimiento = cliente.dtFecNacimiento,
                            blnActivo = cliente.blnActivo
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public string EliminarCliente(Cliente cliente)
        {
            try
            {
                using (var sqlConnection = ConnectionFactory.GetConnection())
                {

                    sqlConnection.Open();
                    string sqlQuery = "DELETE FROM PRS_CLIENTE WHERE intCliente=@intCliente";
                    sqlConnection.Execute(sqlQuery,
                        new
                        {
                            intCliente = cliente.intCliente
                        });

                    sqlConnection.Close();
                    return "";
                }
            }
            catch (Exception ex)
            {
                return ex.Message;
            }
        }

        public Cliente ValidaCliente(String usuario, String pass)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                var cliente = ObtenerClienteUsuario(usuario, pass);
                
                sqlConnection.Close();

                return cliente;
            }
        }

        public Cliente ObtenerCliente(int codigo)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                const string sqlQuery = "select * from prs_cliente where intcliente=@intcliente";
                var cliente = sqlConnection.Query<Cliente>(sqlQuery, new { intcliente = codigo }).FirstOrDefault<Cliente>();

                sqlConnection.Close();

                return cliente;
            }
        }

        public Cliente ObtenerClienteUsuario(string usuario, string password)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                const string sqlQuery = "select * from prs_cliente where vchlogin=@vchlogin and vchpass=@vchpass";
                var cliente = sqlConnection.Query<Cliente>(sqlQuery, new { vchlogin = usuario, vchpass = password }).FirstOrDefault<Cliente>();

                sqlConnection.Close();

                return cliente;
            }
        }

        public IEnumerable<Cliente> ListarClientes()
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                var sqlQuery = string.Format(@"Select * from prs_cliente");
                var result = sqlConnection.Query<Cliente>(sqlQuery);
                sqlConnection.Close();
                return result;
            }
        }

        public IEnumerable<Cliente> ListarClientesInactivos()
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                var sqlQuery = string.Format(@"Select * from prs_cliente WHERE blnActivo='0'");
                var result = sqlConnection.Query<Cliente>(sqlQuery);
                sqlConnection.Close();
                return result;
            }
        }

        public Cliente ValidarLogin(string login, string pass)
        {
            using (var sqlConnection = ConnectionFactory.GetConnection())
            {
                sqlConnection.Open();
                const string sqlQuery = "select * from prs_cliente where vchLogin = @vchLogin and vchPass = @vchPass ";
                var cliente = sqlConnection.Query<Cliente>(sqlQuery, new { vchLogin = login, vchPass = pass }).FirstOrDefault<Cliente>();

                sqlConnection.Close();

                return cliente;
            }
        }
    }
}